<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

</head>

<body>
    <script src="./myModule.js"></script>
    <script>
        var module = myModule();
        module.doSomething();
        module.doOtherThing();
    </script>
    <script src="/myModule2.js"></script>
    <script>
        myModule2.doSomething();
        myModule2.doOtherThing();
    </script>
    <script>
        // var name = 'The window';
        // var obj = {
        //     name: 'my obj',
        //     getNameFunc: function() {
        //         return function() {
        //             return this.name;
        //         }
        //     }
        // };
        // alert(obj.getNameFunc()()); // The window

        // var name2 = 'The window';
        // var obj2 = {
        //     name2: 'my obj',
        //     getNameFunc: function() {
        //         var that = this; // 调用getNameFunc的this
        //         return function() {
        //             return that.name2;
        //         }
        //     }
        // };
        // alert(obj2.getNameFunc()()); // my obj

        // function fun5(n, o) {
        //     console.log(o);
        //     return {
        //         fun5: function(m) {
        //             return fun5(m, n);
        //         }
        //     };
        // }
        // var a = fun5(0); // undefined
        // a.fun5(1); // 0
        // a.fun5(2); // 0
        // a.fun5(3); // 0
        // var b = fun5(0).fun5(1).fun5(2).fun5(3); // undefined 0 1 2
        // var c = fun5(0).fun5(1); // undefined 0
        // c.fun5(2); // 1
        // c.fun5(3); // 1

        // var person = new Object();
        // person.name = 'Tom';
        // person.age = 12;
        // person.setname = function(name) {
        //     this.name = name;
        // }

        // person.setname('Jack');
        // console.log(person.name, person.age); // Jack 12

        // var child = {
        //     name: 'child',
        //     age: 12,
        //     setName: function(name) {
        //         this.name = name;
        //     }
        // }
        // child.setName('achild')
        // console.log(child.name, child.age);

        // function createPerson(name, age) {
        //     var obj = {
        //         name: name,
        //         age: age,
        //         setName: function(name) {
        //             this.name = name;
        //         }
        //     }
        //     return obj;
        // }

        // var person2 = createPerson('Amy', 22);
        // console.log(person2.name, person2.age);
        // var person3 = createPerson('John', 32);
        // console.log(person3.name, person3.age);

        // function Person(name, age) {
        //     this.name = name;
        //     this.age = age;
        //     // this.setName = function(name) {
        //     //     this.name = name;
        //     // }
        // }
        // Person.prototype.setName = function(name) {
        //     this.name = name;
        // }
        // var person4 = new Person('Zhangsan', 23);
        // person4.setName('Lisi');
        // console.log(person4.name, person4.age);

        // function Parent() {
        //     this.parentProp = 'parent';
        // }
        // Parent.prototype.showParentProp = function() {
        //     console.log(this.parentProp);
        // }

        // function Child() {
        //     this.childProp = 'child';
        // }
        // Child.prototype = new Parent(); // 原型链继承的关键：子类型的原型是父类型的实例对象

        // Child.prototype.showChildProp = function() {
        //     console.log(this.childProp);
        // }
        // var child = new Child();
        // child.showParentProp(); // parent
        // child.showChildProp(); // 如果在new Parent之前定义showChildProp则失效 在之后才成立
        // Child.prototype.constructor = Child; // 加上上一句
        // console.log(child.constructor); // 不加上一句 function Parent() {} 加上上一句 function Child() {}

        // function Animal(name, age) {
        //     this.name = name;
        //     this.age = age;
        // }

        // function Dog(name, age, price) {
        //     Animal.call(this, name, age); // 相当于this.Animal(name, age);
        //     this.price = price;
        // }
        // var dog = new Dog('Doggie', 12, 300);
        // console.log(dog.name, dog.age, dog.price);

        // function Person(name, age) {
        //     this.name = name;
        //     this.age = age;
        // }
        // Person.prototype.setName = function(name) {
        //     this.name = name;
        // }

        // function Student(name, age, sex) {
        //     Person.call(this, name, age); // 为了得到属性
        //     this.sex = sex;
        // }
        // Student.prototype = new Person(); // 为了能看到父类型的方法
        // Student.prototype.constructor = Student; // 修正子类型的构造属性
        // Student.prototype.setSex = function(sex) {
        //     this.sex = sex;
        // }
        // var s = new Student('Tom', 12, '男');
        // console.log(s.name, s.age, s.sex);
        // s.setName('Jack');
        // s.setSex('女');
        // console.log(s.name, s.age, s.sex);

        var start = Date.now();
        setTimeout(function() {
            console.log('定时器执行了', Date.now() - start);
        }, 200)
    </script>
</body>

</html>